Node.jsでSSM Parameter Storeから値を取得・作成・更新・削除する方法
はじめに
リテールアプリ共創部のるおんです。
先日、Node.jsを用いたLambda関数でAWS Systems ManagerのParameter Storeから値を取得する機会がありました。
今回は、Node.jsからParameter Storeの値の操作(取得・作成・更新・削除)する方法について解説します。
3行まとめ
- Parameter Storeからの値の取得は、AWS SDK for JavaScriptの
GetParameterCommand
を使用。 - Parameter Storeからの値の作成は、AWS SDK for JavaScriptの
PutParameterCommand
を使用。更新する際はOverwrite
プロパティをtrueにする。 - Parameter Storeからの値の削除は、AWS SDK for JavaScriptの
DeleteParameterCommand
を使用。
AWS Systems Manager Parameter Storeとは
AWS Systems Manager (以下、SSM) は、AWSのインフラストラクチャを管理するためのサービスです。
その中でも、Parameter Storeは、設定データや機密情報(例えば、データベースの接続文字列やAPIキー)を安全に保存し、管理するための機能です。Parameter Storeを使用することで、アプリケーションコードにハードコーディングすることなく、これらの情報を動的に取得・管理することができます。
操作方法
Node.jsアプリケーションからAWSのリソースを操作するには、AWS SDK for JavaScript(v3)を使用します。
前提として、アプリケーションにはSSM Parameter StoreにアクセスするためのIAM権限が付与されていることが必要です。
ライブラリをインストールします。
npm install @aws-sdk/client-ssm
APIリファレンスはこちらです。
それでは早速操作方法を見ていきます。
① 取得
まず、以下の画像のようにParameter Storeで設定しました。
/test/seacret
という名前で、文字列"test-seacret"を作成しました。
Node.jsでは以下のように値を取得します。
import { SSMClient, GetParameterCommand } from "@aws-sdk/client-ssm"; // SSMクライアントの初期化 const ssmClient = new SSMClient({ region: 'ap-northeast-1' }); export const handler = async (event) => { const ssmGetTestCommand = new GetParameterCommand({ Name: '/test/seacret', WithDecryption: true, }); const parameterStore = await ssmClient.send(ssmGetTestCommand); console.log(parameterStore.Parameter.Value); // => "test-seacret" };
このようにして値を取得します。
簡単に説明します。重要なのはハイライト部分です。
const ssmClient = new SSMClient({ region: 'ap-northeast-1' });
まず、SSMClientのインスタンスを初期化します。これにより、SSM Parameter Storeにアクセスするためのクライアントを作成します。
const ssmGetTestCommand = new GetParameterCommand({ Name: '/test/seacret', WithDecryption: true, });
Parameter Storeからの値の取得には、GetParameterCommand
を使用します。
このコマンドは、SSM Parameter Storeから特定のパラメーター(ここでは/test/seacret)を取得するためのものです。
WithDecryptionオプションをtrueに設定することで、暗号化されたパラメーターを復号化して取得します。(今回は暗号化していませんが、暗号化されている際はこのオプションをつける必要があります。)
const parameterStore = await ssmClient.send(ssmGetTestCommand); console.log(parameterStore.Parameter.Value);
最後に、ssmClientのsend
メソッドを使用して、作成したコマンドを送信します。このメソッドは非同期であり、パラメーターの値を含むレスポンスを返します。
取得したパラメーターの値は、parameterStore.Parameter.Valueに格納され、console.logを使用してコンソールに出力されます。
"test-seacret"の文字列が出力されたら成功です。
② 作成
次に、Parameter Storeに値を作成する処理を書いてみます。
Parameter Storeに値を作成するには、PutParameterCommand
を使用します。
import { SSMClient, PutParameterCommand } from "@aws-sdk/client-ssm"; // SSMクライアントの初期化 const ssmClient = new SSMClient({ region: 'ap-northeast-1' }); export const handler = async (event) => { const ssmPutTestCommand = new PutParameterCommand({ Name: '/test/seacret', Value: 'new-test-seacret', Type: 'String', }); const result = await ssmClient.send(ssmPutTestCommand); console.log(result); };
PutParameterCommand
は、SSM Parameter Storeに新しいパラメーターを作成するためのものです。
Nameにはパラメーターの名前を、Valueには格納する値を指定します。Typeにはパラメーターのタイプを指定します。
最後に、ssmClientのsendメソッドを使用して、作成したコマンドを送信します。このメソッドは非同期であり、パラメーターの作成結果を含むレスポンスを返します。console.logを使用して、パラメーターが正常に作成されたことを確認します。
③ 更新
パラメーターの更新は、作成とほぼ同じ手順で行います。PutParameterCommand
のOverwrite
オプションをtrueに設定することで、既存のパラメーターを上書きできます。
const ssmUpdateTestCommand = new PutParameterCommand({ Name: '/test/seacret', Value: 'updated-test-seacret', Type: 'String', Overwrite: true, }); const result = await ssmClient.send(ssmUpdateTestCommand);
マネジメントコンソール上で値を確認し、更新されていたら成功です。
④ 削除
最後に、Parameter Storeからパラメーターを削除する処理を書いてみます。パラメータの削除には、DeleteParameterCommandを使用します。
import { SSMClient, DeleteParameterCommand } from "@aws-sdk/client-ssm"; // SSMクライアントの初期化 const ssmClient = new SSMClient({ region: 'ap-northeast-1' }); export const handler = async (event) => { const ssmDeleteTestCommand = new DeleteParameterCommand({ Name: '/test/seacret', }); await ssmClient.send(ssmDeleteTestCommand); };
このようにして値を削除します。DeleteParameterCommand
を使用し、ssmClientのsendメソッドを使用して、作成した削除コマンドを送信します。
マネジメントコンソール上から値が削除されていたら成功です。
まとめ
今回は、Node.jsを使用してAWS Systems Manager Parameter Storeから値を取得、作成、更新、削除する方法について解説しました。
これらの操作を通じて、アプリケーションの設定データや機密情報を安全に管理し、利用することができます。
ご参考になれば幸いです。
参考
- AWS Systems Manager
- AWS SDK for JavaScript(v3)
- AWS LambdaでSystem Manegerのパラメータから情報を取得したい(Node.js 18)